本篇會繼續以第二正規化(2NF)的基本原則來優化大學資料表(universities)。
我們先來看看 universities 資料表的欄位:
欄位名稱 | 說明 |
---|---|
university_id | 主鍵,識別唯一大學 |
university_name | 依賴 university_id |
address fields | 依賴 university_id |
表格中的欄位(例如名稱、地址相關欄位)都與大學本身相關,符合第二正規化的規則:
2NF:表中的所有非主鍵欄位都完全依賴於主鍵,且沒有部分依賴。
當前所有資料表彼此之間都有關聯,但 universities 尚未與其他表格建立關聯。
根據資料模型中的情境:「科目(subjects)是在大學裡開設的」
該設計情境下的關係為:一所大學可以開設多個科目(one-to-many)。
雖然同一門課程名稱可能存在於多所大學中,但這個模型的定義是:
每個 subject 代表一門由一位老師教授的課程,且學生可註冊該課程,因此,資料模型的關係為:
雖然說按照上面的設計邏輯好像合理,但是可能會有以下風險:
subject_id
唯一識別的課程(例如多筆資料 subject_name
, category_id
, teacher_id
, university_id
都一致的課程),可考慮加上UNIQUE
來幫助識別(例如按照 subject_name
來區分同一位老師開設的多堂同名課程)在 subjects 表格中新增一個欄位:university_id
該欄位為外鍵(Foreign Key),指向 universities 表格的主鍵。
在本資料模型中,大學(universities)資料表原本是獨立存在,未與其他表格建立關聯。為了使資料庫結構更具一致性並符合實際情境,需要將其納入整體資料模型中,並建立與科目(subjects)表的關聯。
更新後的資料表關聯圖如下: